+2006-05-15 Alexander Larsson <alexl@redhat.com>
+
+ * gtk/gtkprintjob.[ch]:
+ Added gtk_print_job_set/get_track_print_status
+
+ * gtk/gtkprintoperation-private.h:
+ * gtk/gtkprintoperation.[ch]:
+ Add gtk_print_operation_set_track_print_status.
+
+ * gtk/gtkprintoperation-unix.c:
+ Implement track_print_status on unix
+
+ * gtk/gtkprintoperation-win32.c:
+ Implement track_print_status on win32
+
+ * gtk/gtk.symbols:
+ Added symbols
+
+ * modules/printbackends/cups/gtkprintbackendcups.c:
+ Implement track_print_status for cups
+
+ * tests/print-editor.c:
+ Test track_print_status.
+
2006-05-15 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkprintoperation.c: Do page rendering in an idle when
+2006-05-15 Alexander Larsson <alexl@redhat.com>
+
+ * gtk/gtkprintjob.[ch]:
+ Added gtk_print_job_set/get_track_print_status
+
+ * gtk/gtkprintoperation-private.h:
+ * gtk/gtkprintoperation.[ch]:
+ Add gtk_print_operation_set_track_print_status.
+
+ * gtk/gtkprintoperation-unix.c:
+ Implement track_print_status on unix
+
+ * gtk/gtkprintoperation-win32.c:
+ Implement track_print_status on win32
+
+ * gtk/gtk.symbols:
+ Added symbols
+
+ * modules/printbackends/cups/gtkprintbackendcups.c:
+ Implement track_print_status for cups
+
+ * tests/print-editor.c:
+ Test track_print_status.
+
2006-05-15 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkprintoperation.c: Do page rendering in an idle when
gtk_print_job_set_source_file
gtk_print_job_get_surface
gtk_print_job_send
+gtk_print_job_set_track_print_status
+gtk_print_job_get_track_print_status
#endif
#endif
#endif
gtk_print_operation_set_unit
gtk_print_operation_set_show_dialog
gtk_print_operation_set_pdf_target
+gtk_print_operation_set_track_print_status
gtk_print_operation_run
gtk_print_operation_run_async
gtk_print_operation_get_status
GtkPrintSettings *settings;
GtkPageSetup *page_setup;
- gint printer_set : 1;
- gint page_setup_set : 1;
- gint settings_set : 1;
+ guint printer_set : 1;
+ guint page_setup_set : 1;
+ guint settings_set : 1;
+ guint track_print_status : 1;
};
priv->settings_set = FALSE;
priv->page_setup_set = FALSE;
priv->status = GTK_PRINT_STATUS_INITIAL;
-
+ priv->track_print_status = FALSE;
+
job->print_pages = GTK_PRINT_PAGES_ALL;
job->page_ranges = NULL;
job->num_page_ranges = 0;
return priv->surface;
}
+/**
+ * gtk_print_job_set_track_print_status:
+ * @job: a #GtkPrintJob
+ * @track_status: %TRUE to track status after printing
+ *
+ * If track_status is %TRUE, the print job will try to continue report
+ * on the status of the print job in the printer queues and printer. This
+ * can allow your application to show things like "out of paper" issues,
+ * and when the print job actually reaches the printer.
+ *
+ * This function is often implemented using some form of polling, so it should
+ * not be enabled unless needed.
+ *
+ * Since: 2.10
+ */
+void
+gtk_print_job_set_track_print_status (GtkPrintJob *job,
+ gboolean track_status)
+{
+ GtkPrintJobPrivate *priv;
+
+ g_return_if_fail (GTK_IS_PRINT_JOB (job));
+
+ priv = job->priv;
+
+ priv->track_print_status = track_status;
+}
+
+/**
+ * gtk_print_job_get_track_print_status:
+ * @job: a #GtkPrintJob
+ *
+ * Returns wheter jobs will be tracked after printing.
+ * For details, see gtk_print_job_set_track_print_status().
+ *
+ * Return value: %TRUE if print job status will be reported after printing
+ *
+ * Since: 2.10
+ */
+gboolean
+gtk_print_job_get_track_print_status (GtkPrintJob *job)
+{
+ GtkPrintJobPrivate *priv;
+
+ g_return_val_if_fail (GTK_IS_PRINT_JOB (job), FALSE);
+
+ priv = job->priv;
+
+ return priv->track_print_status;
+}
+
static void
gtk_print_job_set_property (GObject *object,
guint prop_id,
};
GType gtk_print_job_get_type (void) G_GNUC_CONST;
-GtkPrintJob *gtk_print_job_new (const gchar *title,
- GtkPrinter *printer,
- GtkPrintSettings *settings,
- GtkPageSetup *page_setup);
-GtkPrintSettings *gtk_print_job_get_settings (GtkPrintJob *job);
-GtkPrinter *gtk_print_job_get_printer (GtkPrintJob *job);
-G_CONST_RETURN gchar *gtk_print_job_get_title (GtkPrintJob *job);
-GtkPrintStatus gtk_print_job_get_status (GtkPrintJob *job);
-
-gboolean gtk_print_job_set_source_file (GtkPrintJob *job,
- const gchar *filename,
- GError **error);
-cairo_surface_t *gtk_print_job_get_surface (GtkPrintJob *job,
- GError **error);
-gboolean gtk_print_job_send (GtkPrintJob *job,
- GtkPrintJobCompleteFunc callback,
- gpointer user_data,
- GDestroyNotify dnotify,
- GError **error);
+GtkPrintJob *gtk_print_job_new (const gchar *title,
+ GtkPrinter *printer,
+ GtkPrintSettings *settings,
+ GtkPageSetup *page_setup);
+GtkPrintSettings *gtk_print_job_get_settings (GtkPrintJob *job);
+GtkPrinter *gtk_print_job_get_printer (GtkPrintJob *job);
+G_CONST_RETURN gchar *gtk_print_job_get_title (GtkPrintJob *job);
+GtkPrintStatus gtk_print_job_get_status (GtkPrintJob *job);
+gboolean gtk_print_job_set_source_file (GtkPrintJob *job,
+ const gchar *filename,
+ GError **error);
+cairo_surface_t *gtk_print_job_get_surface (GtkPrintJob *job,
+ GError **error);
+void gtk_print_job_set_track_print_status (GtkPrintJob *job,
+ gboolean track_status);
+gboolean gtk_print_job_get_track_print_status (GtkPrintJob *job);
+gboolean gtk_print_job_send (GtkPrintJob *job,
+ GtkPrintJobCompleteFunc callback,
+ gpointer user_data,
+ GDestroyNotify dnotify,
+ GError **error);
+
G_END_DECLS
gboolean use_full_page;
GtkUnit unit;
gboolean show_dialog;
+ gboolean track_print_status;
char *pdf_target;
/* Data for the print job: */
printer,
settings,
page_setup);
-
+
+ gtk_print_job_set_track_print_status (op_unix->job, priv->track_print_status);
+
rdata->op->priv->surface = gtk_print_job_get_surface (op_unix->job, rdata->error);
if (op->priv->surface == NULL)
{
HANDLE printerHandle = 0;
EndDoc (op_win32->hdc);
- devnames = GlobalLock (op_win32->devnames);
- if (!OpenPrinterW (((gunichar2 *)devnames) + devnames->wDeviceOffset,
- &printerHandle, NULL))
- printerHandle = 0;
- GlobalUnlock (op_win32->devnames);
+
+ if (op->track_print_status)
+ {
+ devnames = GlobalLock (op_win32->devnames);
+ if (!OpenPrinterW (((gunichar2 *)devnames) + devnames->wDeviceOffset,
+ &printerHandle, NULL))
+ printerHandle = 0;
+ GlobalUnlock (op_win32->devnames);
+ }
GlobalFree(op_win32->devmode);
GlobalFree(op_win32->devnames);
PROP_N_PAGES,
PROP_CURRENT_PAGE,
PROP_USE_FULL_PAGE,
+ PROP_TRACK_PRINT_STATUS,
PROP_UNIT,
PROP_SHOW_DIALOG,
PROP_PDF_TARGET,
priv->use_full_page = FALSE;
priv->show_dialog = TRUE;
priv->pdf_target = NULL;
+ priv->track_print_status = FALSE;
priv->unit = GTK_UNIT_PIXEL;
case PROP_USE_FULL_PAGE:
gtk_print_operation_set_use_full_page (op, g_value_get_boolean (value));
break;
+ case PROP_TRACK_PRINT_STATUS:
+ gtk_print_operation_set_track_print_status (op, g_value_get_boolean (value));
+ break;
case PROP_UNIT:
gtk_print_operation_set_unit (op, g_value_get_enum (value));
break;
case PROP_USE_FULL_PAGE:
g_value_set_boolean (value, priv->use_full_page);
break;
+ case PROP_TRACK_PRINT_STATUS:
+ g_value_set_boolean (value, priv->track_print_status);
+ break;
case PROP_UNIT:
g_value_set_enum (value, priv->unit);
break;
GTK_PARAM_READWRITE));
+ /**
+ * GtkPrintOperation:track-print-status:
+ *
+ * If %TRUE, the print operation will try to continue report on the status of
+ * the print job in the printer queues and printer. This can allow your
+ * application to show things like "out of paper" issues, and when the
+ * print job actually reaches the printer. However, this is often
+ * implemented using polling, and should not be enabled unless needed.
+ *
+ * Since: 2.10
+ */
+ g_object_class_install_property (gobject_class,
+ PROP_USE_FULL_PAGE,
+ g_param_spec_boolean ("track-print-status",
+ P_("Track Print Status"),
+ P_("If %TRUE then the print operation will continue to report on the print job status after the print data has been sent to the printer or print server."),
+ FALSE,
+ GTK_PARAM_READWRITE));
+
+
/**
* GtkPrintOperation:unit:
*
}
}
+/**
+ * gtk_print_operation_set_track_print_status:
+ * @op: a #GtkPrintOperation
+ * @track_status: %TRUE to track status after printing
+ *
+ * If track_status is %TRUE, the print operation will try to continue report
+ * on the status of the print job in the printer queues and printer. This
+ * can allow your application to show things like "out of paper" issues,
+ * and when the print job actually reaches the printer.
+ *
+ * This function is often implemented using some form of polling, so it should
+ * not be enabled unless needed.
+ *
+ * Since: 2.10
+ */
+void
+gtk_print_operation_set_track_print_status (GtkPrintOperation *op,
+ gboolean track_status)
+{
+ GtkPrintOperationPrivate *priv;
+
+ g_return_if_fail (GTK_IS_PRINT_OPERATION (op));
+
+ priv = op->priv;
+
+ if (priv->track_print_status != track_status)
+ {
+ priv->track_print_status = track_status;
+
+ g_object_notify (G_OBJECT (op), "track-print-status");
+ }
+}
+
+
void
_gtk_print_operation_set_status (GtkPrintOperation *op,
GtkPrintStatus status,
gboolean show_dialog);
void gtk_print_operation_set_pdf_target (GtkPrintOperation *op,
const gchar *filename);
+void gtk_print_operation_set_track_print_status (GtkPrintOperation *op,
+ gboolean track_status);
GtkPrintOperationResult gtk_print_operation_run (GtkPrintOperation *op,
GtkWindow *parent,
GError **error);
if ((attr = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER)) != NULL)
job_id = attr->values[0].integer;
-
- if (job_id == 0)
- gtk_print_job_set_status (ps->job, GTK_PRINT_STATUS_FINISHED);
- else
- {
- gtk_print_job_set_status (ps->job, GTK_PRINT_STATUS_PENDING);
- cups_begin_polling_info (print_backend, ps->job, job_id);
- }
- }
+ if (!gtk_print_job_get_track_print_status (ps->job) || job_id == 0)
+ gtk_print_job_set_status (ps->job, GTK_PRINT_STATUS_FINISHED);
+ else
+ {
+ gtk_print_job_set_status (ps->job, GTK_PRINT_STATUS_PENDING);
+ cups_begin_polling_info (print_backend, ps->job, job_id);
+ }
+ }
else
gtk_print_job_set_status (ps->job, GTK_PRINT_STATUS_FINISHED_ABORTED);
print = gtk_print_operation_new ();
+ gtk_print_operation_set_track_print_status (print, TRUE);
if (settings != NULL)
gtk_print_operation_set_print_settings (print, settings);